﻿#include "lvgl_weather.h"
#include "lvgl_weather_anim.h"
#include "bmp_tianqi_80x80.h"


__lvgl_weather_data lvgl_weather_data = {
    .cont_main = NULL,
    .task = NULL,
    .close_task = NULL,

};
__lvgl_coord lvgl_weather_p_coord_buf[] = {
    {0,60,80,110},
    {120,60,80,110},
    {240,60,80,110},
};

int lvgl_weather_p_anim_time_buf[] = {
    {400},
    {500},
    {600},
};

void lvgl_weather_task_cb(lv_task_t* t)
{
#if USE_WIN == 1
    static int time = 0;
    if (lvgl_weather_data.refresh_flag == true)//system_data.HuoQu_TianQi_Flag == true && lvgl_refresh_get_sta() == lvgl_refresh_Zhong)
    {
        if (++time > 10 * 2)
        {
            time = 0;
            lvgl_refresh_close();
        }
    }

    static uint16_t t0 = 0;
    if (++t0 > 10)
    {
        t0 = 0;
        system_data.RiQi_Data.miao += 60;
        if (system_data.RiQi_Data.miao >= 60)
        {
            system_data.RiQi_Data.miao = 0;

            system_data.RiQi_Data.fen += 1;
            if (system_data.RiQi_Data.fen >= 60)
            {
                system_data.RiQi_Data.fen = 0;
                system_data.RiQi_Data.shi += 1;
                if (system_data.RiQi_Data.shi >= 24)
                    system_data.RiQi_Data.shi = 1;
            }
        }
    }

#endif

    memset(lvgl_weather_data.p_buf, 0x00, sizeof(lvgl_weather_data.p_buf));
    sprintf(lvgl_weather_data.p_buf, "%d-%02d-%02d", system_data.RiQi_Data.nian, system_data.RiQi_Data.yue, system_data.RiQi_Data.ri);
    lvgl_weather_set_date(lvgl_weather_data.p_buf);
    memset(lvgl_weather_data.p_buf, 0x00, sizeof(lvgl_weather_data.p_buf));
    sprintf(lvgl_weather_data.p_buf, "%02d:%02d", system_data.RiQi_Data.shi, system_data.RiQi_Data.fen);
    lvgl_weather_set_time(lvgl_weather_data.p_buf);

}



void lvgl_weather_close_task_cb(lv_task_t* t)
{
    static uint8_t cnt = 0;

    if (lvgl_weather_data.ctrl_close_flag == true)
    {
        if (++cnt >= lvgl_weather_data.close_count)
        {
            cnt = 0;
            lvgl_weather_data.ctrl_close_flag = false;
            lvgl_task_delete(&lvgl_weather_data.close_task);

            if (lvgl_weather_data.close_num == 0)
            {
                lvgl_weather_anim_out();
                lvgl_weather_anim_out_start(0, 0);
            }


        }
    }
}

void lvgl_weather_anim_out(void)
{

    lvgl_weather_p_anim_start(0, lv_obj_get_height(lvgl_weather_data.cont_main), lvgl_weather_p_anim_time_buf[0]);
    lvgl_weather_p_anim_start(1, lv_obj_get_height(lvgl_weather_data.cont_main), lvgl_weather_p_anim_time_buf[1]);
    lvgl_weather_p_anim_start(2, lv_obj_get_height(lvgl_weather_data.cont_main), lvgl_weather_p_anim_time_buf[2]);
    lvgl_weather_anim_temperature_start(0, 300, lv_obj_get_height(lv_scr_act()));
    lvgl_weather_anim_date_start(0, 300, lv_obj_get_height(lv_scr_act()));

}
void lvgl_weather_anim_in(void)
{

    lvgl_weather_p_anim_start(0, lvgl_weather_p_coord_buf[0].y, lvgl_weather_p_anim_time_buf[0]);
    lvgl_weather_p_anim_start(1, lvgl_weather_p_coord_buf[1].y, lvgl_weather_p_anim_time_buf[1]);
    lvgl_weather_p_anim_start(2, lvgl_weather_p_coord_buf[2].y, lvgl_weather_p_anim_time_buf[2]);

    lvgl_weather_anim_temperature_start(0, 300, lvgl_weather_data.temperature_y);
    lvgl_weather_anim_date_start(0, 300, lvgl_weather_data.date_y);

}
void lvgl_weather_event_cb(struct _lv_obj_t* obj, lv_event_t event)
{

    if (obj == lvgl_weather_data.cont_main)
    {

        //lvgl_weather_debug("cb:%d", event);
        switch (event)
        {
        case LV_EVENT_KEY:

            switch (*(const uint32_t*)lv_event_get_data())
            {
            case LV_KEY_UP:
                lvgl_weather_debug("LV_KEY_UP");

                break;
            case LV_KEY_DOWN:
                lvgl_weather_debug("LV_KEY_DOWN");

                break;
            case LV_KEY_LEFT:
                lvgl_weather_debug("LV_KEY_LEFT");

                break;
            case LV_KEY_RIGHT:
                lvgl_weather_debug("LV_KEY_RIGHT");


                break;
            case LV_KEY_ESC:
                lvgl_weather_debug("LV_KEY_ESC");

                if (lvgl_weather_data.refresh_flag == true)
                {
                    break;
                }

                lvgl_weather_data.ctrl_close_flag = true;
                lvgl_weather_data.close_count = 1;
                lvgl_weather_data.close_num = 0;
                lvgl_task_create(&lvgl_weather_data.close_task, lvgl_weather_close_task_cb, 10, LV_TASK_PRIO_HIGH, NULL);


                break;
            case LV_KEY_DEL:
                lvgl_weather_debug("LV_KEY_DEL");

                break;
            case LV_KEY_BACKSPACE:
                lvgl_weather_debug("LV_KEY_BACKSPACE");

                break;
            case LV_KEY_ENTER:
                lvgl_weather_debug("LV_KEY_ENTER");

                if (lvgl_weather_data.refresh_flag == false)
                {
                    lvgl_weather_data.refresh_flag = true;
                    lvgl_weather_shuaXin_kaishi();
                }

                break;
            case LV_KEY_NEXT:
                lvgl_weather_debug("LV_KEY_NEXT");

                break;
            case LV_KEY_PREV:
                lvgl_weather_debug("LV_KEY_PREV");

                break;
            case LV_KEY_HOME:
                lvgl_weather_debug("LV_KEY_HOME");

                break;
            case LV_KEY_END:
                lvgl_weather_debug("LV_KEY_END");

                break;


            }

            break;

        case CZ_EVENT_ENTER_LEFT:
            lvgl_weather_debug("enter left");




            break;
        case CZ_EVENT_ENTER_RIGHT:
            lvgl_weather_debug("enter right");



            break;
        case CZ_EVENT_ANIM_IN_READY:
            lvgl_weather_debug("event anim in ready");

            if (lvgl_weather_data.refresh_first_flag == false)
            {
                lvgl_weather_data.refresh_first_flag = true;
                uint32_t user_data = LV_KEY_ENTER;
                lvgl_send_event(&lvgl_weather_data.cont_main, LV_EVENT_KEY, &user_data);
            }

            break;
        case CZ_EVENT_ANIM_OUT_READY:
            lvgl_weather_debug("event anim out ready");



            break;
        case CZ_EVENT_REFRESH_OVER:

            lvgl_weather_ShuaXin_jieshu();
            break;
        case LV_EVENT_DELETE:

            lvgl_weather_data.cont_main = NULL;
            lvgl_weather_debug("delete win");
            break;

        case LV_EVENT_PRESSING://对象被持续按下

            break;
        case LV_EVENT_PRESSED://对象已被按下

            break;
        case LV_EVENT_DRAG_END://拖动结束后

            if (lv_obj_get_x(lvgl_weather_data.cont_main) != 0)
            {
                lv_obj_set_x(lvgl_weather_data.cont_main, 0);
            }

            if (lv_obj_get_y(lvgl_weather_data.cont_main) != 0)
            {
                lv_obj_set_y(lvgl_weather_data.cont_main, 0);
            }
            break;
        case LV_EVENT_RELEASED://按钮释放

        case LV_EVENT_LONG_PRESSED://按钮长按

            break;

        default:
            break;

        }

    }
}


void lvgl_weather_create(lv_obj_t* parent)
{


    if (lvgl_weather_data.cont_main == NULL)
    {



        //----创建容器----//
        lvgl_weather_data.cont_main = lv_cont_create(parent, NULL);

        lv_obj_set_size(lvgl_weather_data.cont_main, lv_obj_get_width(parent), lv_obj_get_height(parent));
        lv_obj_set_pos(lvgl_weather_data.cont_main, 0, -(lv_obj_get_height(parent)));

        lv_obj_set_click(lvgl_weather_data.cont_main, true); //启用 / 禁用可点击
        lv_obj_set_drag(lvgl_weather_data.cont_main, true);//启用/禁用对象可拖动
        lv_obj_set_drag_throw(lvgl_weather_data.cont_main, true);//启用/禁用拖动后是否有惯性移动
        lv_obj_set_drag_parent(lvgl_weather_data.cont_main, false); //启用 / 禁用父对象可拖动
        lv_obj_set_drag_dir(lvgl_weather_data.cont_main, LV_DRAG_DIR_HOR);//设置拖动方向
        lv_obj_add_style(lvgl_weather_data.cont_main, LV_OBJ_PART_MAIN, &lvgl_style.cont_no_border);
        lv_obj_set_event_cb(lvgl_weather_data.cont_main, lvgl_weather_event_cb);
        //----创建容器----//




        //----城市----//

        lvgl_weather_data.label_city = lv_label_create(lvgl_weather_data.cont_main, lvgl_weather_data.label_temperature1);
        lv_label_set_text(lvgl_weather_data.label_city, "苏州");
        lv_obj_add_style(lvgl_weather_data.label_city, LV_OBJ_PART_MAIN, &lvgl_style.font_changyong_16_white_bg);
        lv_obj_align(lvgl_weather_data.label_city, NULL, LV_ALIGN_IN_TOP_MID, 0, 5);

        // lvgl_weather_data.image_location = lv_img_create(lvgl_weather_data.cont_main, NULL);
        // lv_obj_set_pos(lvgl_weather_data.image_location, 0, 0);
        // lv_img_set_src(lvgl_weather_data.image_location, &img_weather_0001);
        // lv_obj_align(lvgl_weather_data.image_location, lvgl_weather_data.label_city, LV_ALIGN_OUT_LEFT_MID, 0, 0);

        //----城市----//

        //----今明后天气----//
        for (int i = 0; i < 3; i++)
        {

            lvgl_weather_data.lvgl_weather_p_data[i].cont = lv_cont_create(lvgl_weather_data.cont_main, NULL);
            lv_obj_set_size(lvgl_weather_data.lvgl_weather_p_data[i].cont, lvgl_weather_p_coord_buf[i].w, lvgl_weather_p_coord_buf[i].h);
            lv_obj_set_pos(lvgl_weather_data.lvgl_weather_p_data[i].cont, lvgl_weather_p_coord_buf[i].x, lvgl_weather_p_coord_buf[i].y);
            lv_obj_add_style(lvgl_weather_data.lvgl_weather_p_data[i].cont, LV_OBJ_PART_MAIN, &lvgl_style.cont_transparent);

            lvgl_weather_data.lvgl_weather_p_data[i].image = lv_img_create(lvgl_weather_data.lvgl_weather_p_data[i].cont, NULL);
            lv_obj_set_pos(lvgl_weather_data.lvgl_weather_p_data[i].image, lvgl_weather_p_coord_buf[i].x, 0);
            lv_img_set_src(lvgl_weather_data.lvgl_weather_p_data[i].image, bmp_tianqi_80x80_buf[i]);
            lv_obj_align(lvgl_weather_data.lvgl_weather_p_data[i].image, NULL, LV_ALIGN_IN_TOP_MID, 0, 0);

            lvgl_weather_data.lvgl_weather_p_data[i].label1 = lv_label_create(lvgl_weather_data.lvgl_weather_p_data[i].cont, lvgl_weather_data.label_temperature1);
            lv_label_set_text(lvgl_weather_data.lvgl_weather_p_data[i].label1, lvgl_globa_text[44 + i][system_get_Language()]);
            lv_obj_add_style(lvgl_weather_data.lvgl_weather_p_data[i].label1, LV_OBJ_PART_MAIN, &lvgl_style.font_changyong_16_white_bg);
            lv_obj_align(lvgl_weather_data.lvgl_weather_p_data[i].label1, lvgl_weather_data.lvgl_weather_p_data[i].image, LV_ALIGN_OUT_BOTTOM_MID, 0, -16);

            lvgl_weather_data.lvgl_weather_p_data[i].label2 = lv_label_create(lvgl_weather_data.lvgl_weather_p_data[i].cont, lvgl_weather_data.label_temperature1);
            lv_label_set_text(lvgl_weather_data.lvgl_weather_p_data[i].label2, "10~22");
            lv_obj_add_style(lvgl_weather_data.lvgl_weather_p_data[i].label2, LV_OBJ_PART_MAIN, &lvgl_style.font_changyong_16_white_bg);
            lv_obj_align(lvgl_weather_data.lvgl_weather_p_data[i].label2, lvgl_weather_data.lvgl_weather_p_data[i].label1, LV_ALIGN_OUT_BOTTOM_MID, 0, 0);
        }
        //----今明后天气----//


        lvgl_weather_data.cont_date = lv_cont_create(lvgl_weather_data.cont_main, NULL);
        lv_obj_set_size(lvgl_weather_data.cont_date, 120, 60);
        lv_obj_set_pos(lvgl_weather_data.cont_date, 0, 0);
        lv_obj_add_style(lvgl_weather_data.cont_date, LV_OBJ_PART_MAIN, &lvgl_style.cont_transparent);
        lv_obj_align(lvgl_weather_data.cont_date, NULL, LV_ALIGN_IN_TOP_RIGHT, 0, 0);
        lvgl_weather_data.date_y = lv_obj_get_y(lvgl_weather_data.cont_date);

        lvgl_weather_data.label_date = lv_label_create(lvgl_weather_data.cont_date, lvgl_weather_data.label_temperature1);
        lv_label_set_text(lvgl_weather_data.label_date, "22-12-15");
        lv_obj_add_style(lvgl_weather_data.label_date, LV_OBJ_PART_MAIN, &lvgl_style.font16_white_bg);
        lv_obj_align(lvgl_weather_data.label_date, NULL, LV_ALIGN_IN_BOTTOM_MID, 0, 0);

        lvgl_weather_data.label_time = lv_label_create(lvgl_weather_data.cont_date, lvgl_weather_data.label_temperature1);
        lv_label_set_text(lvgl_weather_data.label_time, "22:10");
        lv_obj_add_style(lvgl_weather_data.label_time, LV_OBJ_PART_MAIN, &lvgl_style.font24_white_bg);
        lv_obj_align(lvgl_weather_data.label_time, lvgl_weather_data.label_date, LV_ALIGN_OUT_TOP_MID, 0, 0);



        //----温度----//
        lvgl_weather_data.cont_temperature = lv_cont_create(lvgl_weather_data.cont_main, NULL);
        lv_obj_set_size(lvgl_weather_data.cont_temperature, 105, 60);
        lv_obj_set_pos(lvgl_weather_data.cont_temperature, 0, 0);
        lv_obj_add_style(lvgl_weather_data.cont_temperature, LV_OBJ_PART_MAIN, &lvgl_style.cont_transparent);
        lv_obj_align(lvgl_weather_data.cont_temperature, NULL, LV_ALIGN_IN_TOP_LEFT, 0, 0);
        lvgl_weather_data.temperature_y = lv_obj_get_y(lvgl_weather_data.cont_temperature);


        lvgl_weather_data.label_temperature1 = lv_label_create(lvgl_weather_data.cont_temperature, NULL);
        lv_obj_set_pos(lvgl_weather_data.label_temperature1, 0, 0);
        lv_label_set_long_mode(lvgl_weather_data.label_temperature1, LV_LABEL_LONG_EXPAND);//循环滚动
        lv_obj_set_pos(lvgl_weather_data.label_temperature1, 0, 0);
        lv_obj_set_size(lvgl_weather_data.label_temperature1, 0, 0);
        lv_label_set_recolor(lvgl_weather_data.label_temperature1, true);
        lv_label_set_align(lvgl_weather_data.label_temperature1, LV_LABEL_ALIGN_CENTER);
        lv_label_set_recolor(lvgl_weather_data.label_temperature1, true);
        lv_label_set_text(lvgl_weather_data.label_temperature1, "25");
        lv_obj_add_style(lvgl_weather_data.label_temperature1, LV_OBJ_PART_MAIN, &lvgl_style.font32_white_bg);
        lv_obj_align(lvgl_weather_data.label_temperature1, NULL, LV_ALIGN_IN_BOTTOM_MID, -5, -5);
        //lv_obj_set_style_local_text_color(lvgl_weather_data.label_temperature1, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_RED);

        lvgl_weather_data.label_temperature2 = lv_label_create(lvgl_weather_data.cont_temperature, lvgl_weather_data.label_temperature1);
        lv_label_set_text(lvgl_weather_data.label_temperature2, "o");
        lv_obj_add_style(lvgl_weather_data.label_temperature2, LV_OBJ_PART_MAIN, &lvgl_style.font_changyong_16_white_bg);
        lv_obj_align(lvgl_weather_data.label_temperature2, lvgl_weather_data.label_temperature1, LV_ALIGN_OUT_TOP_RIGHT, 12, 18);

        lvgl_weather_data.label_temperature3 = lv_label_create(lvgl_weather_data.cont_temperature, lvgl_weather_data.label_temperature1);
        lv_label_set_text(lvgl_weather_data.label_temperature3, "晴");
        lv_obj_add_style(lvgl_weather_data.label_temperature3, LV_OBJ_PART_MAIN, &lvgl_style.font_changyong_16_white_bg);
        lv_obj_align(lvgl_weather_data.label_temperature3, NULL, LV_ALIGN_IN_BOTTOM_RIGHT,10, -5);
        //----温度----//


        lvgl_weather_set_label_temperature1(0);
        lvgl_weather_set_label_temperature3("-");
        lvgl_weather_set_label_city("按下刷新");
        lvgl_weather_set_p_image(0, 39);
        lvgl_weather_set_p_image(1, 39);
        lvgl_weather_set_p_image(2, 39);
        lvgl_weather_set_p_label2(0, 0, 0);
        lvgl_weather_set_p_label2(1, 0, 0);
        lvgl_weather_set_p_label2(2, 0, 0);
        lvgl_weather_set_date("00-00-00");
        lvgl_weather_set_time("00:00");




        lvgl_weather_debug("create win");
    }
    else
    {
        lvgl_weather_debug("show win");
    }


    //lvgl_set_obj_hide(&lvgl_weather_data.cont_date);
    //lvgl_set_obj_hide(&lvgl_weather_data.cont_temperature);

    lv_obj_set_y(lvgl_weather_data.cont_main, -(lv_obj_get_height(lv_scr_act())));

    lv_obj_set_y(lvgl_weather_data.lvgl_weather_p_data[0].cont, lv_obj_get_height(lvgl_weather_data.cont_main));
    lv_obj_set_y(lvgl_weather_data.lvgl_weather_p_data[1].cont, lv_obj_get_height(lvgl_weather_data.cont_main));
    lv_obj_set_y(lvgl_weather_data.lvgl_weather_p_data[2].cont, lv_obj_get_height(lvgl_weather_data.cont_main));

    lv_obj_set_y(lvgl_weather_data.cont_temperature, -(lv_obj_get_height(lvgl_weather_data.cont_temperature)));
    lv_obj_set_y(lvgl_weather_data.cont_date, -(lv_obj_get_height(lvgl_weather_data.cont_date)));


    lvgl_weather_anim_in();



    lvgl_task_create(&lvgl_weather_data.task, lvgl_weather_task_cb, 100, LV_TASK_PRIO_HIGH, NULL);

    lv_obj_move_background(lvgl_weather_data.cont_main);
    lvgl_set_obj_show(&lvgl_weather_data.cont_main);
    lvgl_weather_anim_in_start(0, 0);

}
void lvgl_weather_set_label_temperature1(int data)
{
    char buf[20];
    sprintf(buf, "%02d", data);
    lv_label_set_text(lvgl_weather_data.label_temperature1, buf);
    lv_obj_align(lvgl_weather_data.label_temperature1, NULL, LV_ALIGN_IN_BOTTOM_MID, -5, 0);
}
void lvgl_weather_set_label_temperature3(char* data)
{

    lv_label_set_text(lvgl_weather_data.label_temperature3, data);
    lv_obj_align(lvgl_weather_data.label_temperature3, NULL, LV_ALIGN_IN_BOTTOM_RIGHT, 5, -10);
}
void lvgl_weather_set_label_city(char* data)
{
    lv_label_set_text(lvgl_weather_data.label_city, data);
    lv_obj_align(lvgl_weather_data.label_city, NULL, LV_ALIGN_IN_TOP_MID, 0, 5);
}

void lvgl_weather_set_p_image(int index, int num)
{
    lv_img_set_src(lvgl_weather_data.lvgl_weather_p_data[index].image, bmp_tianqi_80x80_buf[num]);
    lv_obj_align(lvgl_weather_data.lvgl_weather_p_data[index].image, NULL, LV_ALIGN_IN_TOP_MID, 0, 0);

}
void lvgl_weather_set_p_label2(int index, int low, int high)
{
    char buf[20];
    sprintf(buf, "%02d~%02d", low, high);
    lv_label_set_text(lvgl_weather_data.lvgl_weather_p_data[index].label2, buf);
    lv_obj_align(lvgl_weather_data.lvgl_weather_p_data[index].label2, lvgl_weather_data.lvgl_weather_p_data[index].label1, LV_ALIGN_OUT_BOTTOM_MID, 0, 0);

}
void lvgl_weather_set_date(char* data)
{
    lv_label_set_text(lvgl_weather_data.label_date, data);
    lv_obj_align(lvgl_weather_data.label_date, NULL, LV_ALIGN_IN_BOTTOM_MID, 0, 0);
}
void lvgl_weather_set_time(char* data)
{
    lv_label_set_text(lvgl_weather_data.label_time, data);
    lv_obj_align(lvgl_weather_data.label_time, lvgl_weather_data.label_date, LV_ALIGN_OUT_TOP_MID, 0, 0);

}
void lvgl_weather_hidden(void)
{

}

void lvgl_weather_close(void)
{
    lvgl_weather_debug("close");
    lvgl_group_remove_obj(&lvgl_weather_data.cont_main);

    lvgl_task_delete(&lvgl_weather_data.close_task);
    lvgl_task_delete(&lvgl_weather_data.task);

    //lvgl_obj_clean(&lvgl_weather_data.cont_main);
    //lvgl_obj_del(&lvgl_weather_data.cont_main);

    lvgl_set_obj_hide(&lvgl_weather_data.cont_main);

    lvgl_desktop_create(lv_scr_act());
}


//刷新开始
void lvgl_weather_shuaXin_kaishi(void)
{
    lvgl_weather_debug("刷新开始");

    lvgl_weather_data.refresh_Sta = lvgl_refresh_Zhong;

    lv_obj_set_drag(lvgl_weather_data.cont_main, false);//启用/禁用对象可拖动
    lvgl_weather_anim_out();
    system_data.HuoQu_TianQi_Flag = true;
    lvgl_refresh_start(&lvgl_weather_data.cont_main, &system_data.HuoQu_TianQi_Flag, 30);
}
void lvgl_weather_ShuaXin_jieshu(void)
{

    lvgl_weather_debug("天气刷新结束");
    lvgl_weather_data.refresh_flag = false;
    lvgl_weather_data.refresh_Sta = lvgl_refresh_JieShu;
    lvgl_weather_anim_in();

    lv_obj_set_drag_dir(lvgl_weather_data.cont_main, LV_DRAG_DIR_ONE);//设置拖动方向
}







